﻿Imports Commander_Wars.Spieletools
Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
<Serializable()> Public Class ObjektLandschaft
    Implements ICloneable
#Region "Variablen"
#Region "Konstanten"
    Const MaximalesLeben As Integer = 100
    Public Shared ÜbergangsBreite As Integer = Hauptmenü.Feldbreite * 5 / 2
    Public Shared MaxFrames As Integer = 3
#End Region
    Public WirdZu As String = ""
    Private KP As Integer = -1
    Public Property Leben() As Integer
        Get
            Return KP
        End Get
        Set(ByVal value As Integer)
            KP += value
        End Set
    End Property
    Public Sub SetLeben(ByVal NeuLeben As Integer)
        KP = NeuLeben
    End Sub
    Private LandschaftsIDD As String
    Public Property LandschaftsID() As String
        Get
            Return LandschaftsIDD
        End Get
        Set(ByVal value As String)
            LandschaftsIDD = value
        End Set
    End Property
    <NonSerialized()> Private Landschaftsnamen As String
    Public Property Landschaftsname() As String
        Get
            Return Landschaftsnamen
        End Get
        Set(ByVal value As String)
            Landschaftsnamen = value
        End Set
    End Property
    <NonSerialized()> Private IDD As Integer
    Public Property ID() As Integer
        Get
            Return IDD
        End Get
        Set(ByVal value As Integer)
            IDD = value
        End Set
    End Property
    ''' <summary>
    ''' Das Bild wird abgespeichert!
    ''' </summary>
    ''' <remarks></remarks>
    Private BildIDD As Integer
    Public Property BildID() As Integer
        Get
            Return BildIDD
        End Get
        Set(ByVal value As Integer)
            BildIDD = value
        End Set
    End Property
    ''' <summary>
    ''' Wenn true dann wird die Bild ID nicht neu berechnet
    ''' </summary>
    ''' <remarks></remarks>
    Public BildIDFest As Boolean = False
    Public Gebäude As ObjektGebäude
    <NonSerialized()> Private Deckunge As Integer
    Public Property Deckung() As Integer
        Get
            If IsNothing(Gebäude) Then
                Return Deckunge
            Else
                Return Gebäude.Deckung
            End If
        End Get
        Set(ByVal value As Integer)
            Deckunge = value
        End Set
    End Property
    Private Nebel As Nebelarten = Nebelarten.Aus
    Public Property Kriegsnebel() As Nebelarten
        Get
            Return Nebel
        End Get
        Set(ByVal value As Nebelarten)
            Nebel = value
        End Set
    End Property
    Public ÜbergangsIDS() As Integer = {}
    Public Tarnung As Boolean = False
    ''' <summary>
    ''' Gibt an in welchen Modus wir malen müssen.
    ''' </summary>
    ''' <remarks></remarks>
    Public Groß As Boolean = False

    Dim Spieler As Integer = 0
    <NonSerialized()> Public Bewegungsrichtung As Integer = 0
    <NonSerialized()> Public KooX As Integer = 0
    <NonSerialized()> Public KooY As Integer = 0
    <NonSerialized()> Private Shared LanfschaftsFrames As Integer = 0
    <NonSerialized()> Public Shared HochZählen As Integer = -1
    Public Shared Property Frame() As Integer
        Get
            Return LanfschaftsFrames
        End Get
        Set(ByVal value As Integer)
            'Andere Frames für Landschaften erhöhen.
            LandschaftsTexturFeuer.Frames_5 = 1
            LandschaftsTexturPlasma.Frames_2 = 1

            If HochZählen = 0 Then
                LanfschaftsFrames += 1
                If LanfschaftsFrames > MaxFrames Then
                    LanfschaftsFrames = 0
                End If
            Else
                LanfschaftsFrames += HochZählen
                If LanfschaftsFrames > MaxFrames Then
                    HochZählen = -1
                    LanfschaftsFrames += HochZählen * 2
                ElseIf LanfschaftsFrames < 0 Then
                    HochZählen = 1
                    LanfschaftsFrames += HochZählen * 2
                End If
            End If
        End Set
    End Property

#End Region
    Public Sub New(ByVal neuTyp As String, ByVal X As Integer, ByVal Y As Integer, ByVal Spielfeld As ObjektSpielfeld, Optional ByVal neuGebäude As ObjektGebäude = Nothing)
        Gebäude = neuGebäude
        LandschaftsIDD = neuTyp
        Spieler = Zufallszahl(1, Spielfeld.Spieler.Length - 1)
        KooX = X
        KooY = Y
        Landschaftladen(X, Y, Spielfeld)
        If ID >= 0 Then
            WirdZu = Objektverwalter.LandschaftenBilder(ID).WirdZu
        End If
    End Sub
#Region "Malen"
    Public Sub Landschaftladen(ByVal X As Integer, ByVal Y As Integer, ByVal Spielfeld As ObjektSpielfeld)
        For I = 0 To Objektverwalter.LandschaftenBilder.Length - 1
            If Objektverwalter.LandschaftenBilder(I).ID = LandschaftsIDD Then
                ID = I
                BildID = Objektverwalter.LandschaftenBilder(I).BildID(X, Y, Spielfeld)
                ÜbergangsIDS = Objektverwalter.LandschaftenBilder(I).ÜbergangsID(X, Y, Spielfeld)
                Landschaftsnamen = Objektverwalter.LandschaftenBilder(I).Landschaftsname
                Deckung = Objektverwalter.LandschaftenBilder(I).Deckung
                Tarnung = Objektverwalter.LandschaftenBilder(I).Tarnung
                KP = Objektverwalter.LandschaftenBilder(I).KP
                Groß = Objektverwalter.LandschaftenBilder(I).Groß
                WirdZu = Objektverwalter.LandschaftenBilder(I).WirdZu
                Exit For
            End If
        Next
    End Sub
    Public Sub ÜbergängeAktualisieren(ByVal X As Integer, ByVal Y As Integer, ByVal Spielfeld As ObjektSpielfeld)
        If Not BildIDFest Then
            BildID = Objektverwalter.LandschaftenBilder(ID).BildID(X, Y, Spielfeld)
            ÜbergangsIDS = Objektverwalter.LandschaftenBilder(ID).ÜbergangsID(X, Y, Spielfeld)
        End If
    End Sub
    Public Sub RestoreLandschaft(ByVal LOriginal As ObjektLandschaft)
        BildIDFest = LOriginal.BildIDFest
        BildIDD = LOriginal.BildID
        If BildIDD >= Objektverwalter.LandschaftenBilder(ID).Texturen.Length Then
            BildIDFest = False
            ÜbergängeAktualisieren(KooX, KooY, Objektverwalter.Spielfeld)
            BildIDFest = True
        End If
        ÜbergangsIDS = LOriginal.ÜbergangsIDS
    End Sub
    Public Sub Malen(ByVal X As Integer, ByVal Y As Integer, ByVal Alpha As Integer)
        If My.Settings.draw3D Then
            'If Alpha < 255 Then Exit Sub 'Da ich noch nicht weiß, wie man auf transparente Dreiecke malt, lass ich die obere Luftschicht lieber weg, als alles damit zu überdecken.

            'Exit Sub
            Dim p_MatCube As Microsoft.DirectX.Matrix
            p_MatCube = Microsoft.DirectX.Matrix.RotationY(0)
            p_MatCube.M41 = KooX
            p_MatCube.M42 = 0
            p_MatCube.M43 = -KooY

            Objektverwalter.LandschaftenBilder(ID).Malen3D(p_MatCube, Me)
        Else
            'Mal sehen ob wir Speziell Malen sollen.
            Dim sngRotation As Double = 0
            Dim intColor As Color = Color.FromArgb(Alpha, 255, 255, 255)
            If Not DrawSpecialStyle(Alpha) Then
                'prüfen ob wir aus den Screenbereich laufen
                Select Case Kriegsnebel
                    Case Nebelarten.Nebel
                        intColor = Color.FromArgb(Alpha, 180, 180, 180)
                    Case Nebelarten.Kriegsnebel
                        intColor = Color.FromArgb(Alpha, 120, 120, 120)
                End Select

                'Festlegen welchen Bereich vom Bitmap wir kopieren

                'Welcher Teil der Textur soll gemalt werden Nichts bedeutet gesamtes Bild
                If Groß = False Then
                    With Grafikengine.recBild
                        .X = 0 : .Width = Hauptmenü.Feldbreite
                        .Y = 0 : .Height = Hauptmenü.Feldbreite
                    End With
                    With Grafikengine.ptfRotCenter
                        .X = Hauptmenü.Feldbreite / 2
                        .Y = Hauptmenü.Feldbreite / 2
                    End With
                    With Grafikengine.szfScale
                        .Height = Hauptmenü.Feldbreite
                        .Width = Hauptmenü.Feldbreite
                    End With
                Else
                    With Grafikengine.recBild
                        .X = 0 : .Width = Hauptmenü.Feldbreite
                        .Y = 0 : .Height = Hauptmenü.Feldbreite * 2
                    End With
                    With Grafikengine.ptfRotCenter
                        .X = Hauptmenü.Feldbreite / 2
                        .Y = Hauptmenü.Feldbreite / 2 + Hauptmenü.Feldbreite
                    End With
                    With Grafikengine.szfScale
                        .Height = Hauptmenü.Feldbreite * 2
                        .Width = Hauptmenü.Feldbreite
                    End With
                End If
                If Objektverwalter.LandschaftenBilder(ID).Frame Then
                    Grafikengine.recBild.X += Frame * Hauptmenü.Feldbreite
                End If
                'Falls der Zoomfaktor größer 1 ist müssen einige Ränder abgeschnitten werden
                'Hier befindet sich das Rotationszentrum
                'Achtung Rotationszentrum ist auch Ausgangspunkt der bemalung

                'Ausschnitte in den Backbuffer zeichnen
                'Wo wird das Bild gezeichnet
                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * X + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * Y + Objektverwalter.Spielfeld.BildschirmKooY)

                '... und wie breit ist es

                'jetzt wird es in den Backbuffer gezeichnet
                Grafikengine.Sprite.Draw2D(Objektverwalter.LandschaftenBilder(ID).Texturen(BildID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
            End If
            If Hauptmenü.Formmodus = Hauptmenü.Formmodi.Editor Then
                If BildIDFest Then
                    intColor = Color.FromArgb(Alpha, 255, 255, 255)
                    Dim Symbol As Integer = FindElement(Objektverwalter.Symbolfunktion, "KeineAutoLandschaft", True)
                    Grafikengine.szfScale = Nothing
                    Grafikengine.recBild = Nothing
                    With Grafikengine.ptfRotCenter
                        .X = Hauptmenü.Feldbreite / 4
                        .Y = Hauptmenü.Feldbreite / 4
                    End With
                    Grafikengine.ptfPosition.X -= Hauptmenü.Feldbreite / 4
                    Grafikengine.ptfPosition.Y -= Hauptmenü.Feldbreite / 4
                    Grafikengine.Sprite.Draw2D(Objektverwalter.Symbole(Symbol), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                End If
            End If
        End If
    End Sub

    Private Function DrawSpecialStyle(ByVal Alpha As Integer) As Boolean
        Return Objektverwalter.LandschaftenBilder(ID).DrawSpecialStyle(BildID, Kriegsnebel, Alpha, KooX, KooY)
    End Function
    ''' <summary>
    ''' Malt die Übergänge zu anderen Landschaften
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub ÜbergängeMalen(ByVal Alpha As Integer, ByVal X As Integer, ByVal Y As Integer)
        If My.Settings.draw3D Then
        Else
            If ÜbergangsIDS.Length > 0 Then
                Dim sngRotation As Double = 0
                Dim intColor As Color = Color.FromArgb(Alpha, 255, 255, 255)
                Grafikengine.szfScale = Nothing
                Dim Randbreite As Integer = Hauptmenü.Feldbreite * 3 / 4
                Dim SPunkt As Point = New Drawing.Point(Hauptmenü.Feldbreite * X + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * Y + Objektverwalter.Spielfeld.BildschirmKooY)
                Grafikengine.ptfPosition = SPunkt
                'zuerst die Mitte malen
                Select Case Kriegsnebel
                    Case Nebelarten.Nebel
                        intColor = Color.FromArgb(Alpha, 180, 180, 180)
                    Case Nebelarten.Kriegsnebel
                        intColor = Color.FromArgb(Alpha, 120, 120, 120)
                    Case Else
                        intColor = Color.FromArgb(Alpha, 255, 255, 255)
                End Select
                With Grafikengine.recBild
                    .X = Randbreite : .Width = Hauptmenü.Feldbreite
                    .Y = Randbreite : .Height = Hauptmenü.Feldbreite
                End With
                With Grafikengine.ptfRotCenter
                    .X = Hauptmenü.Feldbreite / 2
                    .Y = Hauptmenü.Feldbreite / 2
                End With
                Select Case My.Settings.TerrainStyle
                    Case TerrainStyle.CommanderWars2, TerrainStyle.AdvanceWarsDC
                    Case Else
                        If Objektverwalter.LandschaftenBilder(ID).Frame Then
                            Grafikengine.recBild.X += ÜbergangsBreite * Frame
                        End If
                End Select
                For I = 0 To ÜbergangsIDS.Length - 1
                    If ÜbergangsIDS(I) >= 0 Then
                        Grafikengine.Sprite.Draw2D(Objektverwalter.LandschaftenBilder(ID).Übergänge(ÜbergangsIDS(I)), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                    End If
                Next


                'So und jetzt die Randlandschaften
                Dim L As ObjektLandschaft = Wegsuchsystem.getFeldRundrum(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht, 1, 1, Nothing, Objektverwalter.Spielfeld)
                While L IsNot Nothing
                    Grafikengine.ptfPosition = SPunkt
                    Select Case L.Kriegsnebel
                        Case Nebelarten.Nebel
                            intColor = Color.FromArgb(Alpha, 180, 180, 180)
                        Case Nebelarten.Kriegsnebel
                            intColor = Color.FromArgb(Alpha, 120, 120, 120)
                        Case Else
                            intColor = Color.FromArgb(Alpha, 255, 255, 255)
                    End Select
                    If L.KooX > X Then
                        With Grafikengine.recBild
                            .X = Randbreite + Hauptmenü.Feldbreite : .Width = Randbreite
                            .Y = Randbreite : .Height = Hauptmenü.Feldbreite
                        End With
                        Grafikengine.ptfPosition.X += Hauptmenü.Feldbreite / 2 + Randbreite / 2
                    ElseIf L.KooX < X Then
                        With Grafikengine.recBild
                            .X = 0 : .Width = Randbreite
                            .Y = Randbreite : .Height = Hauptmenü.Feldbreite
                        End With
                        Grafikengine.ptfPosition.X -= (Hauptmenü.Feldbreite / 2 + Randbreite / 2)
                    ElseIf L.KooY > Y Then
                        With Grafikengine.recBild
                            .X = Randbreite : .Width = Hauptmenü.Feldbreite
                            .Y = Randbreite + Hauptmenü.Feldbreite : .Height = Randbreite
                        End With
                        Grafikengine.ptfPosition.Y += (Hauptmenü.Feldbreite / 2 + Randbreite / 2)
                    Else
                        With Grafikengine.recBild
                            .X = Randbreite : .Width = Hauptmenü.Feldbreite
                            .Y = 0 : .Height = Randbreite
                        End With
                        Grafikengine.ptfPosition.Y -= (Hauptmenü.Feldbreite / 2 + Randbreite / 2)
                    End If
                    'Jetzt das eigentliche Malen.
                    Select Case My.Settings.TerrainStyle
                        Case TerrainStyle.CommanderWars2, TerrainStyle.AdvanceWarsDC
                        Case Else
                            If Objektverwalter.LandschaftenBilder(ID).Frame Then
                                Grafikengine.recBild.X += ÜbergangsBreite * Frame
                            End If
                    End Select
                    With Grafikengine.ptfRotCenter
                        .X = Grafikengine.recBild.Width / 2
                        .Y = Grafikengine.recBild.Height / 2
                    End With
                    For I = 0 To ÜbergangsIDS.Length - 1
                        If ÜbergangsIDS(I) >= 0 Then
                            Grafikengine.Sprite.Draw2D(Objektverwalter.LandschaftenBilder(ID).Übergänge(ÜbergangsIDS(I)), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                        End If
                    Next
                    L = Wegsuchsystem.getFeldRundrum(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht, 1, 1, L, Objektverwalter.Spielfeld)
                End While
                'Die 4 äußeren Ecken malen
                Grafikengine.recBild.Size = New Size(Randbreite, Randbreite)
                With Grafikengine.ptfRotCenter
                    .X = Randbreite / 2
                    .Y = Randbreite / 2
                End With
                For I = 0 To 3
                    Select Case I
                        Case 0
                            If Objektverwalter.Spielfeld.OnMap(X - 1, Y - 1) Then
                                L = Objektverwalter.Spielfeld.Landschaften(X - 1, Y - 1, Objektverwalter.Spielfeld.MomentaneSchlacht)
                                Grafikengine.ptfPosition = SPunkt + New Point(-Hauptmenü.Feldbreite / 2 - Randbreite / 2, -Hauptmenü.Feldbreite / 2 - Randbreite / 2)
                                Grafikengine.recBild.Location = New Point(0, 0)
                                If Objektverwalter.LandschaftenBilder(ID).Frame Then
                                    Grafikengine.recBild.X += ÜbergangsBreite * Frame
                                End If
                            Else
                                Continue For
                            End If
                        Case 1
                            If Objektverwalter.Spielfeld.OnMap(X + 1, Y - 1) Then
                                L = Objektverwalter.Spielfeld.Landschaften(X + 1, Y - 1, Objektverwalter.Spielfeld.MomentaneSchlacht)
                                Grafikengine.ptfPosition = SPunkt + New Point(+Hauptmenü.Feldbreite / 2 + Randbreite / 2, -Hauptmenü.Feldbreite / 2 - Randbreite / 2)
                                Grafikengine.recBild.Location = New Point(ÜbergangsBreite - Randbreite, 0)
                                If Objektverwalter.LandschaftenBilder(ID).Frame Then
                                    Grafikengine.recBild.X += ÜbergangsBreite * Frame
                                End If
                            Else
                                Continue For
                            End If
                        Case 2
                            If Objektverwalter.Spielfeld.OnMap(X - 1, Y + 1) Then
                                L = Objektverwalter.Spielfeld.Landschaften(X - 1, Y + 1, Objektverwalter.Spielfeld.MomentaneSchlacht)
                                Grafikengine.ptfPosition = SPunkt + New Point(-Hauptmenü.Feldbreite / 2 - Randbreite / 2, Hauptmenü.Feldbreite / 2 + Randbreite / 2)
                                Grafikengine.recBild.Location = New Point(0, ÜbergangsBreite - Randbreite)
                                If Objektverwalter.LandschaftenBilder(ID).Frame Then
                                    Grafikengine.recBild.X += ÜbergangsBreite * Frame
                                End If
                            Else
                                Continue For
                            End If
                        Case 3
                            If Objektverwalter.Spielfeld.OnMap(X + 1, Y + 1) Then
                                L = Objektverwalter.Spielfeld.Landschaften(X + 1, Y + 1, Objektverwalter.Spielfeld.MomentaneSchlacht)
                                Grafikengine.ptfPosition = SPunkt + New Point(+Hauptmenü.Feldbreite / 2 + Randbreite / 2, Hauptmenü.Feldbreite / 2 + Randbreite / 2)
                                Grafikengine.recBild.Location = New Point(ÜbergangsBreite - Randbreite, ÜbergangsBreite - Randbreite)
                                If Objektverwalter.LandschaftenBilder(ID).Frame Then
                                    Grafikengine.recBild.X += ÜbergangsBreite * Frame
                                End If
                            Else
                                Continue For
                            End If
                    End Select
                    Select Case L.Kriegsnebel
                        Case Nebelarten.Nebel
                            intColor = Color.FromArgb(Alpha, 180, 180, 180)
                        Case Nebelarten.Kriegsnebel
                            intColor = Color.FromArgb(Alpha, 120, 120, 120)
                    End Select
                    For I2 = 0 To ÜbergangsIDS.Length - 1
                        If ÜbergangsIDS(I2) >= 0 Then
                            Grafikengine.Sprite.Draw2D(Objektverwalter.LandschaftenBilder(ID).Übergänge(ÜbergangsIDS(I2)), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                        End If
                    Next
                Next
            End If
        End If
    End Sub
    Public Sub WetterMalen()
        If Objektverwalter.Spielfeld.Regeln.Wetter > ObjektSpielfeld.Wetterarten.Sonne Then
            Dim sngRotation As Double = 0
            Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
            Select Case Kriegsnebel
                Case Nebelarten.Nebel
                    intColor = Color.FromArgb(255, 180, 180, 180)
                Case Nebelarten.Kriegsnebel
                    intColor = Color.FromArgb(255, 120, 120, 120)
            End Select
            'prüfen ob wir aus den Screenbereich laufen

            'Festlegen welchen Bereich vom Bitmap wir kopieren

            'Welcher Teil der Textur soll gemalt werden Nichts bedeutet gesamtes Bild

            With Grafikengine.recBild
                .X = Hauptmenü.FeldbreiteKlein * Objektverwalter.Spielfeld.Wetterframe : .Width = Hauptmenü.FeldbreiteKlein
                .Y = 0 : .Height = Hauptmenü.FeldbreiteKlein
            End With
            With Grafikengine.ptfRotCenter
                .X = Hauptmenü.FeldbreiteKlein / 2
                .Y = Hauptmenü.FeldbreiteKlein / 2
            End With
            '... und wie breit ist es
            With Grafikengine.szfScale
                .Height = Hauptmenü.Feldbreite
                .Width = Hauptmenü.Feldbreite
            End With
            Grafikengine.Sprite.Draw2D(TexturenHalter.GetWetter(Objektverwalter.Spielfeld.Regeln.Wetter), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
        End If
    End Sub
    ''' <summary>
    ''' Gibt den Spieler zurück bei dem sich die Wolken bewegen
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetSpielerWolken() As Integer
        Return Spieler
    End Function
    ''' <summary>
    ''' Legt fest  den Spieler zurück bei dem sich die Wolken bewegen
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub SetSpielerWolken(ByVal Spieler As Integer)
        Me.Spieler = Spieler
    End Sub
#End Region
    Public Function getID() As String
        If IsNothing(Gebäude) Then
            Return LandschaftsIDD
        Else
            Return Gebäude.GebäudeID
        End If
    End Function
    Public Function GetDeckung() As Integer
        If Objektverwalter.Spielfeld.Einheiten(KooX, KooY, Objektverwalter.Spielfeld.MomentaneSchlacht) Is Nothing Then
            If IsNothing(Gebäude) Then
                Return Deckung
            Else
                Return Gebäude.Deckung
            End If
        Else
            Return Objektverwalter.Spielfeld.Einheiten(KooX, KooY, Objektverwalter.Spielfeld.MomentaneSchlacht).GetSpieler.GetDeffensivSterne(Nothing, Me)
        End If
    End Function
    Public Function isGebäude() As Boolean
        If Gebäude Is Nothing Then
            Return False
        Else
            Return True
        End If
    End Function
    Public Overridable Function GetMaxLeben() As Integer
        If Gebäude Is Nothing Then
            If Leben > 0 Then
                Return 100
            Else
                Return 0
            End If
        Else
            Return Gebäude.GetMaxLeben
        End If
    End Function
    ''' <summary>
    ''' Gibt das Leben der Landschaft bzw. des Gebäudes zurück.
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetLive() As Integer
        If Gebäude Is Nothing Then
            Return Leben
        Else
            Return Gebäude.KP
        End If
    End Function
    ''' <summary>
    ''' Klont die gesamte Landschaft mit Gebäude
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function Clone() As Object Implements System.ICloneable.Clone
        Dim L As ObjektLandschaft = MemberwiseClone()
        ReDim L.ÜbergangsIDS(ÜbergangsIDS.Length - 1)
        For I = 0 To ÜbergangsIDS.Length - 1
            L.ÜbergangsIDS(I) = ÜbergangsIDS(I)
        Next
        If Not Gebäude Is Nothing Then
            L.Gebäude = Gebäude.Clone
        End If
        Return L
    End Function
End Class

